package main

import (
	"embed"
	"fmt"
	"log"
	"net/http"
	"time"

	"filehive-backend/config"
	"filehive-backend/routes"
	"filehive-backend/utils"
)

// 嵌入前端静态文件
//go:embed dist/frontend/dist/*
var embeddedDist embed.FS

func main() {
	// 加载配置
	cfg, err := config.GetConfig()
	if err != nil {
		log.Fatalf("加载配置失败: %v", err)
	}

	// 确保存储目录存在
	if err := utils.EnsureDir(cfg.Storage.Path); err != nil {
		log.Fatalf("创建存储目录失败: %v", err)
	}

	// 设置路由（传递嵌入的文件系统）
	router := routes.SetupRoutes(cfg, embeddedDist)

	// 打印启动信息
	printStartupInfo(cfg)

	// 启动单个监听地址
	addr := cfg.Server.IP + ":" + cfg.Server.Port
	fmt.Printf("🔄 正在启动服务器: %s\n", addr)
	if err := http.ListenAndServe(addr, router); err != nil {
		log.Fatalf("服务器启动失败: %v", err)
	}
}

func printStartupInfo(cfg *config.Config) {
	localIP := utils.GetLocalIP()
	
	fmt.Println("🚀 FileHive Go版本文件共享服务器启动成功！")
	fmt.Println("📦 架构模式: 单二进制文件部署 (内嵌前端)")
	fmt.Printf("🔒 监听地址: %s\n", cfg.Server.IP)
	fmt.Println("🌐 访问地址:")
	if cfg.Server.IP == "127.0.0.1" || cfg.Server.IP == "localhost" {
		fmt.Printf("   - 本地访问: http://%s:%s\n", cfg.Server.IP, cfg.Server.Port)
	} else if cfg.Server.IP == "0.0.0.0" {
		fmt.Printf("   - 局域网访问: http://%s:%s (本机IP)\n", localIP, cfg.Server.Port)
		fmt.Printf("   - 本地访问: http://127.0.0.1:%s\n", cfg.Server.Port)
		// 显示所有可用的本机IP地址
		allIPs := utils.GetAllLocalIPs()
		if len(allIPs) > 0 {
			fmt.Println("📡 本机所有IP地址:")
			for _, ip := range allIPs {
				fmt.Printf("   - http://%s:%s\n", ip, cfg.Server.Port)
			}
		}
	} else {
		fmt.Printf("   - 指定IP访问: http://%s:%s\n", cfg.Server.IP, cfg.Server.Port)
	}
	
	fmt.Printf("📂 共享目录: %s\n", cfg.Storage.Path)
	fmt.Println("🌐 前端文件: 内嵌到可执行文件中")
	fmt.Printf("⏰ 启动时间: %s\n", time.Now().Format("2006-01-02 15:04:05"))
	fmt.Println("\n🔐 网络配置:")
	fmt.Println("   ✅ 单IP监听模式")
	fmt.Println("   ✅ CORS允许所有来源")
	fmt.Println("   ✅ 前端文件内嵌集成")
	fmt.Println("\n📋 路由说明:")
	fmt.Println("   /             - 前端界面 (内嵌静态文件)")
	fmt.Println("   /api/*        - API接口")
	fmt.Println("   /*            - 前端资源 (CSS, JS, 图片等)")
	fmt.Println("\n📋 API端点:")
	fmt.Println("   GET  /api/files       - 获取文件列表")
	fmt.Println("   POST /api/upload      - 上传文件")
	fmt.Println("   POST /api/folder      - 创建文件夹")
	fmt.Println("   DELETE /api/files     - 删除文件")
	fmt.Println("   GET  /api/download    - 下载文件")
	fmt.Println("   PUT  /api/move        - 移动/重命名")
	fmt.Println("   GET  /api/info        - 文件信息")
	fmt.Println("\n💡 部署优势:")
	fmt.Println("   🎯 单文件部署: 无需单独的前端文件")
	fmt.Println("   📦 零依赖: 仅需一个可执行文件")
	fmt.Println("   即开即用: 下载即可运行")
} 